// controllers/audioController.js
const axios = require('axios');
const FormData = require('form-data');

// 引入日志工具
const logger = require('../utils/logger');

exports.transcribeAudioLocal = async (req, res) => {
    logger.info('AUDIO_TRANSCRIBE', '========================================');
    logger.info('AUDIO_TRANSCRIBE', '开始处理音频转录请求');
    
    // 添加调试信息
    logger.info('AUDIO_TRANSCRIBE', '请求头信息:', req.headers);
    logger.info('AUDIO_TRANSCRIBE', '请求文件信息:', req.files);
    logger.info('AUDIO_TRANSCRIBE', '请求单个文件信息:', req.file);
    
    // 检查是否有文件上传
    if (!req.file) {
        logger.warn('AUDIO_TRANSCRIBE', '未上传音频文件');
        return res.status(400).json({ msg: 'No audio file uploaded.' });
    }

    try {
        logger.info('AUDIO_TRANSCRIBE', '开始处理音频转录请求');
        logger.info('AUDIO_TRANSCRIBE', '文件信息:', {
            originalname: req.file.originalname,
            mimetype: req.file.mimetype,
            size: req.file.size,
            bufferLength: req.file.buffer.length
        });
        
        // 创建表单数据
        const form = new FormData();
        // 使用Buffer.from创建一个新的Buffer，并指定文件名和正确的MIME类型
        form.append('audio', Buffer.from(req.file.buffer), { 
            filename: 'audio.webm',
            contentType: 'audio/webm'
        });
        
        // 添加调试信息
        logger.info('AUDIO_TRANSCRIBE', 'FormData创建完成，文件大小:', req.file.buffer.length);

        // 调用本地的Python Whisper API
        logger.info('AUDIO_TRANSCRIBE', '准备调用本地Whisper API');
        logger.info('AUDIO_TRANSCRIBE', 'Whisper API地址: http://localhost:5001/transcribe');
        
        const response = await axios.post('http://localhost:5001/transcribe', form, {
            headers: {
                ...form.getHeaders(),
            },
            timeout: 30000 // 设置30秒超时
        });

        logger.info('AUDIO_TRANSCRIBE', 'Whisper API调用成功');
        logger.info('AUDIO_TRANSCRIBE', '响应状态码:', response.status);
        logger.info('AUDIO_TRANSCRIBE', '响应数据:', response.data);

        res.json({ result: response.data.result });

    } catch (error) {
        logger.error('AUDIO_TRANSCRIBE', '音频转录过程中出现错误', {
            message: error.message,
            stack: error.stack,
            // 添加更多错误信息
            response: error.response ? {
                status: error.response.status,
                data: error.response.data
            } : null,
            code: error.code,
            request: error.request ? '存在请求对象' : '无请求对象'
        });
        
        // 根据错误类型返回不同的响应
        if (error.code === 'ECONNREFUSED') {
            res.status(500).send('无法连接到Whisper服务，请检查服务是否正常运行。');
        } else if (error.code === 'ECONNABORTED') {
            res.status(500).send('Whisper服务响应超时，请稍后重试。');
        } else if (error.response) {
            // 服务返回了错误状态码
            res.status(error.response.status).send(`Whisper服务错误: ${JSON.stringify(error.response.data)}`);
        } else {
            res.status(500).send('音频转录过程中出现未知错误。');
        }
    } finally {
        logger.info('AUDIO_TRANSCRIBE', '音频转录请求处理完成');
        logger.info('AUDIO_TRANSCRIBE', '========================================');
    }
};